#include <stdio.h>

// Code d'erreur de main():
// 0: Aucune erreur detectée
// 1: Code d'erreur reçu de fTommorow()
//
// Code d'erreurs de fTommorow():
// 0: Aucune erreur detectée
// 1: date incorrecte
// 2: date incorrecte, 29 février d'une année non-bissextile

int fBissextile(int date); // Détermine si l'année est bissextile ou non
int fTommorow(int jour, int mois, int annee, int bissextile); // Calcule la date du lendemain est vérifie la validité de la date

int main()
{
  int date, annee, mois, jour, bissextile;

  printf("Entrez une date sous la forme JJMMAAAA (exemple 12021991) : ");
  scanf("%d", &date);

  annee = date - date / 10000 * 10000;
  mois = (date - annee - date / 1000000 * 1000000) / 10000;
  jour = date / 1000000;

  // Si l'année est bissextile, bissextile=1, sinon bissextile=0
  bissextile = fBissextile(annee);

  if( fTommorow(jour, mois, annee, bissextile) )
  {
    printf("La date entrée n'est pas valide !\n");
    return 1;
  }

  return 0;
}

 //-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
 //-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
 //-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
 //-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\
//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\\

int fBissextile(int date)
{
  int bissextile = 0;

  if(date % 4 == 0 && date % 100 != 0 || date % 400 == 0)
    bissextile = 1;

  return bissextile;
}

int fTommorow(int jour, int mois, int annee, int bissextile)
{
  // les calcule de la date du lendemain s'effectueront sur ce tableau
  // prenant donc comme valeur initial les valeurs traitée de la date
  // entrée pas l'utilisateur.
  int tommorow[3] = {jour, mois, annee};

  if(jour < 1 || jour > 31 || mois < 1 || mois > 12)
    return 0;

  switch(mois)
  {
    // les mois de 30 jours
    case 4 || 6 || 7 || 9 || 11:
      if(jour == 31)
        return 0;
      else if(jour < 30)
        tommorow[0]++;
      else
      {
        tommorow[0] = 1;
        tommorow[1]++;
      }
      break;

    // Le mois de février
    case 2:
      // Cas du 29 février des années bissextiles
      if(!bissextile && jour == 29)
        return 2;
      else if (bissextile && jour == 29 || jour == 28)
      {
        tommorow[0] = 1;
        tommorow[1] = 3;
      }
      else
        tommorow[0]++;
      break;

    // Spécialité du 31 décembre
    case 12:
      if(jour == 31)
      {
        tommorow[0] = 1;
        tommorow[1] = 1;
        tommorow[2]++;
      }
      break;

    // Les mois à 31 jours
    default:
      // le 31 décembre est déjà traité plus haut
      if(jour == 31 && mois != 12)
      {
        tommorow[0] = 1;
        tommorow[1]++;
      }
      else
        tommorow[0]++;
      break;
  }

  printf("Le lendemain du %02d-%02d-%d est le %02d-%02d-%d\n", jour, mois, annee, tommorow[0], tommorow[1], tommorow[2]);
  return 0;
}
